Various forms of network-based storage systems are known today. These forms include network attached storage (NAS), storage area networks (SANs), and others. Network storage systems are commonly used for a variety of purposes, such as providing multiple users with access to shared data, backing up critical data (e.g., by data mirroring), etc.
A network-based storage system typically includes at least one storage server, which is a processing system configured to store and retrieve data on behalf of one or more client processing systems (“clients”). In the context of NAS, a storage server may be a file server, which is sometimes called a “filer”. A filer operates on behalf of one or more clients to store and manage shared files. The files may be stored in a storage subsystem that includes one or more arrays of mass storage devices, such as magnetic or optical disks or tapes, by using RAID (Redundant Array of Inexpensive Disks). Hence, the mass storage devices in each array may be organized into one or more separate RAID groups.
In a SAN context, a storage server provides clients with block-level access to stored data, rather than file-level access. Some storage servers are capable of providing clients with both file-level access and block-level access, such as servers made by Network Appliance, Inc. (NetApp®) of Sunnyvale, Calif.
In storage servers, data can be stored in logical containers called volumes, which may be co-extensive with, or subsets of, aggregates. An “aggregate” is a logical container for a pool of storage, combining one or more physical mass storage devices (e.g., disks) or parts thereof into a single logical storage object, which contains or provides storage for one or more other logical data sets at a higher level of abstraction (e.g., volumes). A “volume” is a set of stored data associated with a collection of mass storage devices, such as disks, which obtains its storage from (i.e., is contained within, and may be coextensive with) an aggregate, and which is managed as an independent administrative unit, such as a complete file system. A file system logically organizes information as a hierarchical structure of name directories and file objects (hereinafter “directories” and “files”) on the disks. Although a volume or file system (as those terms are used herein) may store data in the form of files, that is not necessarily the case. That is, a volume or file system may store data in the form of other units, such as blocks or Logical Unit Numbers (LUNs).
A storage server can have one or more file systems that are exported to clients. To manage which clients have access to a particular exported file system, the storage server maintains clients' access permissions for the exported file system. Based on the access permissions, the storage server determines whether a request coming from a particular client (e.g., a read or write request) should be authorized or denied. Clients' access permissions may be stored in a cache of the storage server to speed up the storage server's response upon receiving a request from a client. According to known techniques, the access permissions can be organized as a hash table in the cache. However, there are several shortcomings associated with the use of a hash table. For example, when a new entry needs to be inserted into a hash table that is already full, resizing the hash table is expensive and complicated. Furthermore, a hash table is not particularly efficient in using the cache's limited storage resource, therefore, reducing the performance of the storage server in handling clients' access requests. Thus, a better way to organize clients' access permissions in a cache of a storage server is needed.